#ifndef KAPTILO_H
#define KAPTILO_H
//
#include <QObject>
#include <pcap.h>
//
class NewThread;
//

/*! Интерфейс к классу функции-анализатора.
 *
 * Реализуйте в наследнике метод Funk - свою функцию-анализатор и передайте
 * указатель на объект своего класса в объект класса Kaptilo.
 * Объект Kaptilo станет родителем для вашего объекта функции-анализатора и
 * позаботится об освобождении памяти.
 */
class KaptiloFunk : public QObject{
Q_OBJECT
public:
	KaptiloFunk( QObject * parent = 0): QObject(parent) {}
	/*! Реализуйте в этом методе свою функцию-ловушку.
	 * @param header информация о длине пакета и времени его получения.
	 * @param pkt_data сам пакет: сетевой кадр, заголовок IP, заголовок TCP и т.д.
	 */
	virtual void Funk(const struct pcap_pkthdr * header, const u_char * pkt_data) = 0;
	virtual ~KaptiloFunk() {}
};

/*! Подключается к указанному сетевому устройству и регистрирует ловушку пакетов
 * с указанным фильтром.
 *
 * Ловушка запускается бесконечным циклом в отдельном потоке. При создании понадобится передать
 * 	- имя устройства;
 * 	- фильтр пакетов;
 * 	- указатель на объект содержащий функцию вызываемую для анализа каждого пакета (см. KaptiloFunk).
 *
 * Объект Kaptilo станет родителем для объекта функции-анализатора и
 * позаботится об освобождении памяти.
 */
class Kaptilo : public QObject{
Q_OBJECT
private:
	NewThread * th;
public:
	/*! Конструктор
	 * @param device строка с именем устройства.
	 * @param filter строка с фильтром.
	 * @param kf указатель на объект функции-анализатора.
	 */
	Kaptilo(const QString & device, const QString & filter, KaptiloFunk * kf, QObject * parent = 0);
	virtual ~Kaptilo();
};

#endif
